﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace AlgorithmTest
{
    // T_[四个数字排序]_[算法名]
    public class T_0170_WordPattern : IAlgorithm
    {
        // 290. 单词规律

        // 给定一种规律 pattern 和一个字符串 s ，判断 s 是否遵循相同的规律。
        // 这里的 遵循 指完全匹配，例如， pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。

        // 提示:
        //  1 <= pattern.length <= 300
        //  pattern 只包含小写英文字母
        //  1 <= s.length <= 3000
        //  s 只包含小写英文字母和 ' '
        //  s 不包含 任何前导或尾随对空格
        //  s 中每个单词都被 单个空格 分隔


        public void Test()
        {
            // 算法参数定义
            string pattern = "abba", s = "dog cat cat dog";
            // 算法执行与打印
            Console.WriteLine(WordPattern(pattern, s));
            //var res = Algorithm(param);
            //foreach (var item in res)
            //{
            //    foreach (var iitem in item)
            //    {
            //        Console.Write(iitem + " ");
            //    }
            //    Console.WriteLine();
            //}
        }

        // 算法
        public bool WordPattern(string pattern, string s)
        {
            var hashmap = new Dictionary<object, int>();
            var strArray = s.Split(" ");
            if (strArray.Length != pattern.Length)
                return false;
            for (int i = 0; i < strArray.Length; i++)
            {
                var v1 = hashmap.GetValueOrDefault(pattern[i], -1);
                var v2 = hashmap.GetValueOrDefault(strArray[i], -1);
                if (v1 != v2)
                    return false;
                if (v1 != -1)
                    hashmap[pattern[i]]++;
                else
                    hashmap.Add(pattern[i], i);
                if (v2 != -1)
                    hashmap[strArray[i]]++;
                else
                    hashmap.Add(strArray[i], i);
            }
            return true;
        }
    }
}
